package com.jvyou.app.ds.utils.login;

import cn.dev33.satoken.stp.StpUtil;
import com.jvyou.app.common.constants.RedisKey;
import com.jvyou.app.common.domain.model.LoginUser;
import com.jvyou.app.common.enums.HttpCodeEnum;
import com.jvyou.app.common.exception.AppException;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 当前登录用户信息
 *
 * @author 橘柚
 * @since 2025/4/2 09:35
 */
@Component
public class LoginContext {

    /**
     * 获取当前登录用户ID
     *
     * @return 用户ID
     */
    public static Long getUserId() {
        if (!StpUtil.isLogin()) {
            throw new AppException(HttpCodeEnum.REQUIRE_TOKEN);
        }
        return Long.parseLong(StpUtil.getLoginId().toString());
    }

    /**
     * 判断是否登录
     *
     * @return 是否登录
     */
    public static boolean isLogin() {
        return StpUtil.isLogin();
    }

    /**
     * 获取当前登录用户Token
     *
     * @return token
     */
    public static String getToken() {
        if (!StpUtil.isLogin()) {
            throw new AppException(HttpCodeEnum.REQUIRE_TOKEN);
        }
        return StpUtil.getTokenValue();
    }

    /**
     * 获取当前登录用户信息
     *
     * @return 用户信息
     */
    public static LoginUser getLoginUser() {
        LoginUser loginUser = (LoginUser) StpUtil.getSession().get(RedisKey.LOGIN_USER_KEY + StpUtil.getLoginId());
        if (loginUser == null) {
            throw new AppException(HttpCodeEnum.REQUIRE_TOKEN);
        }
        return loginUser;
    }

    /**
     * 获取当前登录用户权限
     *
     * @return 权限
     */
    public static List<String> getPermissions() {
        if (!StpUtil.isLogin()) {
            return null;
        }
        return StpUtil.getPermissionList();
    }

    /**
     * 获取当前登录用户角色
     *
     * @return 角色
     */
    public static List<String> getRoles() {
        if (!StpUtil.isLogin()) {
            return null;
        }
        return StpUtil.getRoleList();
    }

}
